/**
  ******************************************************************************
  * @file    main.c 
  * @author  18408107475@163.com
  * @version V1.1.0
  * @date    2025-06-03
  * @brief   RFID-RC522 读写控制系统（IO模拟SPI）
  * @details 
  * 硬件配置：
  *   - MCU: STM32F103ZET6 (72MHz Cortex-M3)
  *     - PA4: RC522片选(CS)
  *     - PA5: SPI时钟(SCK)
  *     - PA6: SPI输入(MISO)
  *     - PA7: SPI输出(MOSI) 
  *     - PB0: RC522复位(RST)
  *   - RFID-RC522模块
  *     - 工作频率：13.56MHz
  *     - 通信协议：ISO14443A
  * 
  * 软件特性：
  *   - 支持MIFARE Classic 1K卡片
  *   - 自动防冲突处理
  *   - 基础读写功能实现
  *   - 串口调试信息输出
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"          // STM32标准外设库（核心寄存器定义、中断控制器等）
#include "Delay.h"              // 精确延时函数库（基于SysTick实现，精度±1us）
#include "USART1_Config.h"      // USART1初始化及printf重定向（波特率115200）
#include "RFID_RC522_Config.h"  // RC522驱动头文件（寄存器定义、函数声明等）

/* 私有变量定义 --------------------------------------------------------------*/
// 注：实际变量定义应在对应模块内部，此处仅为示例
// static u8 g_ucCardUID[4];    // 卡片UID缓存（4字节）
// static u8 g_ucSectorData[16]; // 扇区数据缓冲区

/**
  ******************************************************************************
  * @brief  主程序入口
  * @param  None
  * @retval int 程序状态码（实际不会返回）
  * @note   系统执行流程：
  *         1. 硬件外设初始化（时钟、串口、SPI、RC522）
  *         2. 进入主循环持续检测卡片
  *         3. 发现卡片后执行标准处理流程：
  *            - 寻卡（PcdRequest）
  *            - 防冲突（PcdAnticoll） 
  *            - 选卡（PcdSelect）
  *            - 认证（PcdAuthState）
  *            - 读写操作（PcdRead/PcdWrite）
  *            - 休眠卡片（PcdHalt）
  ******************************************************************************
  */
int main(void)
{
    /* 硬件初始化阶段 ------------------------------------------------*/
    USART1_Config(115200);     // 初始化USART1（8N1，115200bps）
    USART1_Printf("\r\nSystem Boot...\r\n");  // 启动信息（通过串口输出）
    
    RC522_Init();              // 初始化RC522模块
                               // - 复位芯片（PcdReset）
                               // - 配置ISO14443A模式（M500PcdConfigISOType）
                               // - 开启射频场（PcdAntennaOn）
    
    /* 主任务循环 ----------------------------------------------------*/
    while (1)
    {
        RC522_Handel();        // RC522主处理函数（包含完整卡片操作流程）
        
        /* 延时500ms降低功耗（可根据实际需求调整）*/
        Delay_ms(500);         // 基于SysTick的精确延时
        
        /* 系统状态指示（可选）*/
        // GPIO_ToggleBits(GPIOC, GPIO_Pin_13); // 心跳灯
    }
    
    /* 程序理论上不会执行到此处 */
    return 0;                  // 符合C语言标准要求的返回值
}

/************************ (C) COPYRIGHT 2025 Embedded Team *****END OF FILE****/